To protect against the specific chdir(..) escape technique you mentioned, you can simply drop the capability to execute chroot(2) again once you're chrooted ...
If you do not call chdir(/) after creating a chroot jail, file manipulation functions that takes a path as an argument can access files outside of the jail.